export const socketContact = (url: string = '', getDataSecret: string = '', callBack: any = () => {}) => {
    // const baseUrl = process.env.VUE_APP_API_WEBSOCKET_URL // baseURL
    const baseUrl = '' // baseURL
    // getDataSecret 需要发送给服务器的数据
    let socket // websocket本体
    let lock = false // 避免重复连接
    let replyOverTime = null // 服务器回复超时setTimeout
    let hearByteTime = null // 心跳 setTimeout
    const heatByte =  (type?: any) => {
        hearByteTime && clearInterval(hearByteTime)
        replyOverTime && clearInterval(replyOverTime)
        // 每30s一次心跳
        hearByteTime = setTimeout(() => {
            if (socket.readyState === 1) {
                socket.send('heart byte') // 没问题进行心跳
                console.log('heart byte')
            }
            // 重新链接超时 60s无回复 关闭连接 尝试重新链接
            replyOverTime = setTimeout(() => {
                socket.close()
                console.log('网络/其他问题 回复超时间关闭')
            }, 60000)
        }, 30000)
    }
    const resetHardByte = () => {
        // 进行下一次心跳
        hearByteTime && clearTimeout(hearByteTime)
        replyOverTime && clearTimeout(replyOverTime)
        heatByte()
    }
    const reconnect = (url, getDataSecret, callBack) => {
        if (lock) return
        lock = true
        setTimeout(() => {
            lock = false
            socketContact(url, getDataSecret, callBack)
            console.log('正在尝试重新连接')
        }, 5000)
    }
    try {
        socket = new WebSocket(baseUrl + url)
        socket.addEventListener('open', function (event) {
            socket.send(getDataSecret)
            heatByte() // 开始心跳
            console.log('链接成功', url, getDataSecret)
        })
        socket.addEventListener('message', function (event) {
            resetHardByte() // 重置心跳
            // 这里transporting...' 和'invalid command...'为服务器心跳回复 不做数据返回处理
            // if (event.data === 'transporting...' || event.data === 'invalid command...') return
            // 处理服务器返回数据 这里可自定义
            console.log(11111111111)
            callBack(event.data)
        });
        socket.addEventListener('close', function (event) {
            console.log('链接关闭', event.code)
            reconnect(url, getDataSecret, callBack) // 尝试重新连接
        });
        socket.addEventListener('error', function (event) {
            console.log('链接报错')
            reconnect(url, getDataSecret, callBack)// 尝试重新连接
        });
    } catch (e) {
        console.log('catch', e)
        reconnect(url, getDataSecret, callBack) // 尝试重新连接
    }
    
    window.addEventListener('beforeunload', e => socket.colse())
    return socket
}


// const wst = () => {
//     // 创建WebSocket对象并指定服务器地址
//     var socket = new WebSocket("ws://example.com/socket");

//     // 监听连接建立事件
//     socket.onopen = function() {
//         console.log("WebSocket连接已建立");
//         // 在连接建立后，可以发送消息到服务器
//         socket.send("Hello Server!");
//     };

//     // 监听接收到服务器发送的消息
//     socket.onmessage = function(event) {
//         var message = event.data;
//         console.log("接收到服务器发送的消息：" + message);
//     };

//     // 监听连接关闭事件
//     socket.onclose = function(event) {
//         console.log("WebSocket连接已关闭");
//     };

//     // 监听连接错误事件
//     socket.onerror = function(event) {
//         console.error("WebSocket连接错误：" + event);
//     }
// }